/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CiaAerea;

import java.util.ArrayList;

/**
 *
 * @author Thomas
 */
public class CiaAerea {

    private ArrayList<Cliente> cliente = new ArrayList<Cliente>();
    private ArrayList<Voo> voo = new ArrayList<Voo>();
    private ArrayList<Destino> destino = new ArrayList<Destino>();
    private ArrayList<Aeronave> aeronave = new ArrayList<Aeronave>();
    private ArrayList<Reserva> reserva = new ArrayList<Reserva>();
    private static int qtdeDestino = 0;
    private static int qtdeAeronaves = 0;

    public Endereco cadastrarEndereco() {
        Endereco novoEndereco = new Endereco();

        //Receber do usuario
        novoEndereco.setRua("");

        //Receber do usuario
        novoEndereco.setBairro("");

        //Receber do usuario
        novoEndereco.setComplemento("");

        //Receber do usuario
        novoEndereco.setNumero("");

        //Receber do usuario
        novoEndereco.setCEP("");

        //Receber do usuario
        novoEndereco.setCidade("");

        //Receber do usuario
        novoEndereco.setEstado("");

        //Receber do usuario
        novoEndereco.setPais("");

        return novoEndereco;
    }

    public void cadastrarDestino(int cod, String Cidade, String Aeroporto, int Fuso, double Distancia, Endereco EndDest, Voo voo) {
        boolean achou = false;
        
        //Procura a ocorrência do código nos outros objetos existentes
        for (int contador = 0; contador <= destino.size() && (!achou); contador++) {
            if (destino.get(contador).getcodigoIdentificador() == cod) {
                achou = true;
            }
        }
        
        //Se já existe o código, exibir a mensagem de erro
        if (achou) {
            System.out.println("Código identificador já existente!");
        } else {
            //Caso contrário cadastrar o destino 
            Destino dest = new Destino(cod, Cidade, Aeroporto, Fuso, Distancia, EndDest,voo);
            destino.add(dest);
            qtdeDestino++;
        }

    }

    public void removerDestino(String nomeCidade, String nomeAeroporto) {

        if (nomeCidade == null || nomeAeroporto == null) {
            System.out.println("Campo Nome da Cidade ou Nome Aeroporto em branco");
        } else {
            destino.remove(destino.indexOf(nomeAeroporto));
        }

    }

    public void alterarDestino(int alteracao, int id) {

        switch (alteracao) {
            case 0:
                //Receber do usuário a informação da nome da cidade de destino
                destino.get(destino.indexOf(id)).setNomeCidade("São Paulo");
                System.out.println(destino.get(id).getNomeCidade());
                break;
            case 1:
                //Receber do usuário a informação do nome do aeroporto
                destino.get(destino.indexOf(id)).setNomeAeroporto("Internacional");
                System.out.println(destino.get(id).getNomeAeroporto());
                break;
            case 2:
                //Receber do usuário a informação do fuso horário
                destino.get(destino.indexOf(id)).setFusoHorario(-3);
                System.out.println(destino.get(id).getFusoHorario());
                break;
            case 3:
                //Receber do usuário a informação da distância
                destino.get(destino.indexOf(id)).setDistanciaBase(520.00);
                System.out.println(destino.get(id).getDistanciaBase());
                break;
            case 4:
                //Receber do usuário informações para o endereço do aeroporto
                destino.get(destino.indexOf(id)).setEnderecoAeroporto(cadastrarEndereco());
                System.out.println(destino.get(id).getEnderecoAeroporto());
                break;
            default:
                System.out.println("Campo de alteração inválido");
        }

    }

    public void cadastrarAeronave(String prefixoIdentificador, String modelo, int autonomia,
            int numTotalFileiras, int numAssentosPorFileira, int numFileirasExecutiva, int numFileirasEconomica) {

        boolean achou = false;

        //procura a ocorrência dessa aeronave na lista
        for (int contador = 0; contador <= aeronave.size() && (!achou); contador++) {
            if (aeronave.get(contador).getPrefixoIdentificador().equals(prefixoIdentificador)) {
                achou = true;
            }
        }

        //Se já existir, então mostrar mensagem de erro
        if (achou) {
            System.out.println("Prefixo Identificador já existente!");
        } else {
            //Caso contrário cria o cadastro da aeronave
            Aeronave dados = new Aeronave(prefixoIdentificador, modelo, autonomia, numTotalFileiras, numAssentosPorFileira, numFileirasExecutiva, numFileirasEconomica);
            aeronave.add(dados);
            qtdeAeronaves++;
            System.out.println("Aeronave cadastrada com sucesso!");
        }

    }

    public void removerAeronave(String prefixoIdentificador) {

        try {
            aeronave.remove(aeronave.get(Integer.parseInt(prefixoIdentificador)));
            System.out.println("Aeronave removida com sucesso!");
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Aeronave inexistente no sistema!");
        }


    }

    public void alterarAeronave(int alteracao, int prefixoIdentificador) {

        switch (alteracao) {
            case 0:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setModelo("Teste");
                System.out.println(aeronave.get(prefixoIdentificador).getModelo());
                break;
            case 1:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setAutonomia(10);
                System.out.println(aeronave.get(prefixoIdentificador).getAutonomia());
                break;
            case 2:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setNumTotalFileiras(100);
                System.out.println("teste" + aeronave.get(prefixoIdentificador).getNumTotalFileiras());
                break;
            case 3:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setNumAssentosPorFileira(10);
                System.out.println(aeronave.get(prefixoIdentificador).getNumAssentosPorFileira());
                break;
            case 4:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setNumFileirasExecutiva(2);
                System.out.println(aeronave.get(prefixoIdentificador).getNumFileirasExecutiva());
                break;
            case 5:
                aeronave.get(aeronave.indexOf(prefixoIdentificador)).setNumFileirasEconomica(2);
                System.out.println(aeronave.get(prefixoIdentificador).getNumFileirasExecutiva());
                break;
            default:
                System.out.println("Erro na alteracao! Campo inexistente.");
                break;

        }

    }

    public void cadastrarVoo(Aeronave nave) {

        if (nave == null) {
            System.out.println("Campo nave vazio");
        } else {
        }


    }

    public void removerVoo(int codigoVoo) {
    }

    public void alterarVoo(Aeronave nave) {

        if (nave == null) {
            System.out.println("Campo nave vazio");
        } else {
        }

    }

    public void cadastrarCliente(String nome, String cpf, String eMail,
            String telefone, String celular, boolean isClienteFidelidade, String numeroFidelidade, Endereco end) {
        boolean achou = false;

        //Procura a ocorrencia de outro cliente com o mesmo CPF
        for (int contador = 0; contador <= cliente.size() && (!achou); contador++) {
            if (cliente.get(contador).getCpf().equals(cpf)) {
                achou = true;
            }
        }

        //Se já o CPF já existir, mostrar mensagem de erro
        if (achou) {
            System.out.println("CPF Existente");
        } else {
            //Caso contrário adicionar novo cliente
            Cliente novoCliente = new Cliente(nome, cpf, eMail, telefone, celular, isClienteFidelidade, numeroFidelidade, end);
            cliente.add(novoCliente);
        }
    }

    public void removerCliente(String cpfCliente) {
        if (cpfCliente == null) {
            System.out.println("cpfCliente vazio");
        } else {
            cliente.remove(cliente.indexOf(cpfCliente));

        }
    }

    public void alterarCliente(int alteracao, String cpf) {
        int cpfCliente;

        cpfCliente = Integer.parseInt(cpf);

        switch (alteracao) {
            case 0:
                cliente.get(cliente.indexOf(cpfCliente)).setNome("Guilherme");
                System.out.println(cliente.get(cpfCliente).getNome());
                break;
            case 1:
                cliente.get(cliente.indexOf(cpfCliente)).seteMail("guilherme@ft");
                System.out.println(cliente.get(cpfCliente).geteMail());
                break;
            case 2:
                cliente.get(cliente.indexOf(cpfCliente)).setTelefone("12345678");
                System.out.println(cliente.get(cpfCliente).getTelefone());
                break;
            case 3:
                cliente.get(cliente.indexOf(cpfCliente)).setCelular("87654321");
                System.out.println(cliente.get(cpfCliente).getCelular());
                break;
            case 4:
                cliente.get(cliente.indexOf(cpfCliente)).setIsClienteFidelidade(false);
                System.out.println(cliente.get(cpfCliente).getIsClienteFidelidade());
                break;
            case 5:
                cliente.get(cliente.indexOf(cpfCliente)).setNumeroFidelidade("0");
                System.out.println(cliente.get(cpfCliente).getNumeroFidelidade());
                break;
            default:
                System.out.println("Erro na alteracao! Campo inexistente.");
                break;
        }
    }

    public boolean efetuarReserva(String codigoVoo, int fileira, char assento, String cpfCliente) {

        
        
        
        return true;
    }

    public boolean cancelarReserva(String codigoVoo, String cpfCliente) {
        return false;
    }

    public double estimarFaturamentoOtimista() {
        double valor = 0;
        
        for(int contador=0;contador<reserva.size();contador++)
        {
           if(reserva.get(contador).isIsExecutiva())
            {
            
                valor += voo.get(voo.indexOf(reserva.get(contador).getVooReserva())).getValorPassagemExecutiva();
            }
            else
            {
                valor += voo.get(voo.indexOf(reserva.get(contador).getVooReserva())).getValorPassagemEconomica();
            } 
        }
                 

        return valor;

    }

    public double estimarFaturamentoPessimista() {
        double valor = 0;
        
        for(int contador=0;contador<reserva.size();contador++)
        {
           if(reserva.get(contador).isIsExecutiva())
            {
            
                valor += (voo.get(voo.indexOf(reserva.get(contador).getVooReserva())).getValorPassagemExecutiva()) * 0.1;
            }
            else
            {
                valor += (voo.get(voo.indexOf(reserva.get(contador).getVooReserva())).getValorPassagemEconomica()) * 0.1;
            } 
        }

        return valor;

    }

    public Destino getDestino(int id) {
        return destino.get(destino.indexOf(id));
    }

    public Voo getVoo(int cod) {
        return voo.get(voo.indexOf(cod));
    }

    public Aeronave getAeronave(int prefId) {
        return aeronave.get(aeronave.indexOf(prefId));
    }

    public Cliente getCliente(String cpfCliente) {

        return cliente.get(cliente.indexOf(cpfCliente));
    }

    public Reserva getReserva(int codigoVoo, String cpfCliente) {
        Reserva reserva = new Reserva('a', 3,false,voo.get(voo.indexOf(codigoVoo)), cliente.get(cliente.indexOf(cpfCliente)));

        return reserva;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        System.out.println("Programado executado com sucesso :-)");
    }
}
